package com.yuntuzhilian.chapter6;

/**
 * @author MrWang-shuizhishuiheshui
 * @description 主人类
 */
public class Master {

    public void play(Pet pet){
        //父类引用对象不能调用子类特有的方法
        //需要将父类引用对象转化为子类对象

        /*
        判断pet对象实际存放的子类对象
        instanceof : 判断对象是否属于某个类的类型
         */
        if (pet instanceof Dog){
            Dog d=(Dog)pet;
            d.catchingDisc();
        }else if(pet instanceof Penguin){
            Penguin p=(Penguin)pet;
            p.swimming();
        }


    }


    /**
     * 给狗喂食
     * @param dog
     */
//    public void feed(Dog dog){
//        dog.eat();
//    }
    /**
     * 给企鹅喂食
     * @param pen
     */
//    public void feed(Penguin pen){
//        pen.eat();
//    }

    /**
     * 喂所有的宠物  Pet类
     * @param pet
     */
    public void feed(Pet pet){
        pet.eat();
    }

//    public void feed(Cat cat){
//        cat.eat();
//    }
//    public void feed(Fish fish){
//        fish.eat();
//    }



    /**
     * 分析:
     *  宠物都具有吃的能力
     *  每增加一个新的宠物,主人类就要重新修改,
     *  添加给新宠物喂食的方法
     *
     *  主人考虑的是喂食,不考虑哪一个宠物,
     *  让主人喂所有的宠物
     *
     *  面向对象的程序设计:
     *      1.程序易拓展 --> 保证程序的扩展性
     *      2.多扩展,少修改
     *
     */

}
